package org.aplombh.java.leetcode.all;

public class _12整数转罗马数字 {
}

// 分支
class Solution12_1 {
    public String intToRoman(int num) {
        // 1000 900 500 400 100 90 50 40 10 9 5 4 1
        StringBuilder sb = new StringBuilder();
        while (num > 0) {

            if (num >= 1000) {
                num -= 1000;
                sb.append("M");
            } else if (num >= 900) {
                num -= 900;
                sb.append("CM");
            } else if (num >= 500) {
                num -= 500;
                sb.append("D");
            } else if (num >= 400) {
                num -= 400;
                sb.append("CD");
            } else if (num >= 100) {
                num -= 100;
                sb.append("C");
            } else if (num >= 90) {
                num -= 90;
                sb.append("XC");
            } else if (num >= 50) {
                num -= 50;
                sb.append("L");
            } else if (num >= 40) {
                num -= 40;
                sb.append("XL");
            } else if (num >= 10) {
                num -= 10;
                sb.append("X");
            } else if (num >= 9) {
                num -= 9;
                sb.append("IX");
            } else if (num >= 5) {
                num -= 5;
                sb.append("V");
            } else if (num >= 4) {
                num -= 4;
                sb.append("IV");
            } else {
                num -= 1;
                sb.append("I");
            }
        }
        return sb.toString();
    }
}

// 一一对应
class Solution12_2 {
    public String intToRoman(int num) {
        String[] s = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        int[] v = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        StringBuilder r = new StringBuilder();
        for (int i = 0; i < v.length && num > 0; ++i) {
            int value = v[i];
            String symbol = s[i];
            while (num >= value) {
                num -= value;
                r.append(symbol);
            }
        }
        return r.toString();
    }
}

// 硬编码
class Solution12_3 {
    String[] thousands = {"", "M", "MM", "MMM"};
    String[] hundreds = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    String[] tens = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    String[] ones = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};

    public String intToRoman(int num) {
        return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];
    }
}